﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Data;
using BL;
using BE;
using CrystalDecisions.Shared;

using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.Collections;

namespace UI.Secretaria
{
    public partial class frmImpresionNomina : System.Web.UI.Page
    {
        //private Reporte rptreporte = new Reporte(); 
        protected void Page_Load(object sender, EventArgs e)
        {
            if (!IsPostBack)
            {
                llenaCombos();
            }
        }

        
        void llenaCombos()
        {
            DataTable dato = new DataTable();
            Alumno_BL obj = new Alumno_BL();

            dato = obj.DATA_ESPECIALIDAD_ListaEspecialidades();
            ddlEspecialidad.DataSource = dato;
            ddlEspecialidad.DataTextField = "desesp";
            ddlEspecialidad.DataValueField = "cod_Espec";
            ddlEspecialidad.DataBind();
            ddlEspecialidad.Items.Insert(0, "--Selecciones--");


            dato.Clear();
            dato = obj.DATA_PERIODO_listaxSemestre("TODOS");
            ddlSemestre.DataSource = dato;
            ddlSemestre.DataTextField = "semestre";
            ddlSemestre.DataValueField = "semestre";
            ddlSemestre.DataBind();
            ddlSemestre.Items.Insert(0, "--Selecciones--");

        }


        protected string ImprimiendoNOMINA(object drv)
        {

            string url = "";
            return url;
        }


        protected void Button1_Click(object sender, EventArgs e)
        {
            if (ddlSemestre.SelectedIndex == 0)
            {
                lblMensaje.Text = "Selecciones un Semestre";
                return;
            }

            if (ddlEspecialidad.SelectedIndex == 0)
            {
                lblMensaje.Text = "Seleccione una Especialidad";
                return;
            }

            Secretaria_BL OBJ = new Secretaria_BL();
            DataTable dato = new DataTable();
            dato = OBJ.DATA_MATRIC1_ListaNominas(ddlSemestre.SelectedValue, ddlCiclo.SelectedValue, ddlEspecialidad.SelectedValue);
            grvNomina.DataSource = dato;
            grvNomina.DataBind();

            CuentaItemsGrilla(dato);
        }


        public void CuentaItemsGrilla(DataTable dato)
        {
            if (dato.Rows.Count == 0)
            {
                grvNomina.Caption = "No se encontró coincidencias";
            }
            else if (dato.Rows.Count == 1)
            {
                grvNomina.Caption = "Total de items - 1 registro encontrado";
            }
            else
            {
                grvNomina.Caption = "Total de items - " + dato.Rows.Count + " registros encontrados";
            }
        }

        protected void grvNomina_SelectedIndexChanged(object sender, EventArgs e)
        {
            /*GridViewRow row = grvNomina.SelectedRow;
            String semestre = grvNomina.SelectedRow.Cells[0].Text.ToString();
            string ciclo =  grvNomina.SelectedRow.Cells[2].Text.ToString();
            string especialidad =  grvNomina.SelectedRow.Cells[1].Text.ToString();
            string flag_confirmado = grvNomina.DataKeys[row.RowIndex].Values["flag_confirmado"].ToString();
            llenaGrilla(semestre, ciclo, especialidad,flag_confirmado);
            */
        }

       void llenaGrilla(String semestre,string ciclo,string especialidad,string flag_confirmado)
        {
           


            HttpContext context = HttpContext.Current;
            DataTable dato6 = new DataTable();
            String cicloRomano = "";
            Util_BL objUtil2 = new Util_BL();
            

           // lis.Clear();

            Alumno_BL obj = new Alumno_BL();


            dato6 = obj.DATA_MATRIC1_Nomina_Edita_DATATABLE(semestre, ciclo, especialidad); //detalle




           
            cicloRomano = objUtil2.CICLO_ROMANO(ciclo);

            // se arma un datatable co los datos de especialidad ciclo escuela
            Util_BL objUtil = new Util_BL();
            DataTable dato = new DataTable();
            DataTable dato2 = new DataTable();
            DataTable dato3 = new DataTable();
            dato = objUtil.DATA_ESPECIALIDAD_ListaPorCodigo(especialidad);
            dato2 = objUtil.DATA_MATRIC1_CuentaPorSexo(semestre, especialidad, ciclo, "F"); // CUENTA SEXO FEMENINO
            dato3 = objUtil.DATA_MATRIC1_CuentaPorSexo(semestre, especialidad, ciclo, "M"); // CUENTA SEXO MASCULINO

            // si tiene el flag_grupo=1 se pasa como valor de la especialidad el texto varios
            string ESPECIALIDAD = "";
            string semestre2 = ddlSemestre.SelectedValue.Substring(ddlSemestre.SelectedValue.Length - 1, 1);
            
                //ESPECIALIDAD = "VARIOS";

            string periodo = ddlSemestre.SelectedValue.Substring(0, 4);
            if (semestre2 == "1")
            {
                semestre2 = periodo+"-I (Período Marzo - Julio)";
            }

            if (semestre2 == "2")
            {
                semestre2 = periodo+"-II (Período Agosto - Diciembre)";
            }


            ESPECIALIDAD = dato.Rows[0]["DESESP"].ToString();
            


            DataTable Cabecera = new DataTable();
            Cabecera.Columns.Add("SEMESTRE_ACADEMICO");
            Cabecera.Columns.Add("ESCUELA_PROFESIONAL");
            Cabecera.Columns.Add("ESPECIALIDAD");
            Cabecera.Columns.Add("CICLO");
            Cabecera.Columns.Add("CONTEO_SEXOF");
            Cabecera.Columns.Add("CONTEO_SEXOM");

            DataRow fila = Cabecera.NewRow();
            fila[0] = semestre2;
            fila[1] = dato.Rows[0]["Descripcion"].ToString();
            fila[2] = ESPECIALIDAD;
            fila[3] = cicloRomano;
            fila[4] = dato2.Rows[0]["SEXO"].ToString();
            fila[5] = dato3.Rows[0]["SEXO"].ToString();


            Cabecera.Rows.Add(fila);

            Cabecera.AcceptChanges();
            Cabecera.TableName = "Cabecera";


            DataTable Detalle = new DataTable();
            Detalle.Columns.Add("Codigo");
            Detalle.Columns.Add("ApellidosyNombres");
            Detalle.Columns.Add("Condicion");
            Detalle.Columns.Add("Edad");
            Detalle.Columns.Add("Sexo");
            Detalle.Columns.Add("Observacion");
            Detalle.Columns.Add("EspecialidadDetalle");




            // se obtiene los datos del detalle
            DropDownList ddl;
            String codigo;
            String nombres;
            String estado;
            String edad;
            String sexo;
            String OBS;
            String EspecialidadDetalle;
            foreach (DataRow row in dato6.Rows)
            {

               

                codigo = row["COD_ALUMNO"].ToString();
                nombres = row["Nombres"].ToString();
                estado = row["Descripcion"].ToString();
                edad = row["Edad"].ToString();
                sexo = row["SEXO"].ToString();
                OBS = "";
                EspecialidadDetalle = row["COD_ESPEC"].ToString();
               
                DataRow fila2 = Detalle.NewRow();
                fila2[0] = codigo;
                fila2[1] = nombres;
                fila2[2] = estado;
                fila2[3] = edad;
                fila2[4] = sexo;
                fila2[5] = OBS;
                fila2[6] = EspecialidadDetalle;
                Detalle.Rows.Add(fila2);

            }



            /*se exporta a excel*/
            DataSet dsNomina = new DataSet();

            Cabecera.TableName = "Cabecera";
            Detalle.TableName = "Detalle";

            dsNomina.Tables.Add(Cabecera);
            dsNomina.Tables.Add(Detalle);
             // si tiene el flag confirmado se imprime la nomina oficial de locontrario se imprime nomina provisional
                                         //se replico el rptnomina  trabajar solo con 1  (Pendiente)

            if (flag_confirmado == "0") //si la nomina ah sido confirmada
            {
                if (dato.Rows[0]["FLAG_GRUPO"].ToString() == "1")
                {
                    //rptreporte.ResourceName = "nomina_grupo.rpt";
                    GenerarReportenomina_grupo(dsNomina);
                }
                else
                {
                    //rptreporte.ResourceName = "nomina_Provisional.rpt";
                    GenerarReportenomina_Provisional(dsNomina);
                }
                

            }

            else

            {
                //rptreporte.ResourceName = "nomina.rpt";
                GenerarReportenomina(dsNomina);

            }

            
            //rptreporte.SetDataSource(dsNomina);
            //rptreporte.ExportToHttpResponse(CrystalDecisions.Shared.ExportFormatType.PortableDocFormat, Response, true, semestre+"-"+especialidad.Trim()+ciclo.Trim());

            //rptreporte.Close();
            // CuentaItemsGrilla(lis);
        }

       private void GenerarReportenomina_grupo(DataSet dsNomina)
       {
           lblMensaje.Text = "";
           try
           {
               nomina_grupo reporte = new nomina_grupo();

               reporte.SetDataSource(dsNomina);
               System.IO.MemoryStream rptStream = new System.IO.MemoryStream();
               rptStream = (System.IO.MemoryStream)reporte.ExportToStream(ExportFormatType.PortableDocFormat);
               Response.Clear();
               Response.Buffer = true;
               Response.ContentType = "application/pdf";
               Response.AddHeader("Content-Disposition", "attachment;filename=" + "NominaGrupo.pdf");

               Response.BinaryWrite(rptStream.ToArray());
               reporte.Close();
               Response.End();

           }
           catch (Exception ex)
           {
               lblMensaje.Text = ex.Message;
           }
       }
       private void GenerarReportenomina_Provisional(DataSet dsNomina)
       {
           lblMensaje.Text = "";
           try
           {
               nomina_Provisional reporte = new nomina_Provisional();

               reporte.SetDataSource(dsNomina);
               System.IO.MemoryStream rptStream = new System.IO.MemoryStream();
               rptStream = (System.IO.MemoryStream)reporte.ExportToStream(ExportFormatType.PortableDocFormat);
               Response.Clear();
               Response.Buffer = true;
               Response.ContentType = "application/pdf";
               Response.AddHeader("Content-Disposition", "attachment;filename=" + "NominaProvisional.pdf");

               Response.BinaryWrite(rptStream.ToArray());
               reporte.Close();
               Response.End();

           }
           catch (Exception ex)
           {
               lblMensaje.Text = ex.Message;
           }
       }
       private void GenerarReportenomina_ProvisionalWord(DataSet dsNomina)
       {
           lblMensaje.Text = "";
           try
           {
               nomina_Provisional reporte = new nomina_Provisional();

               reporte.SetDataSource(dsNomina);
               System.IO.MemoryStream rptStream = new System.IO.MemoryStream();
               rptStream = (System.IO.MemoryStream)reporte.ExportToStream(ExportFormatType.WordForWindows);
               Response.Clear();
              

               Response.Buffer = true;
               Response.ContentType = "application/msword";
               Response.AddHeader("Content-Disposition", "attachment;filename=" + "NominaProvisional.doc");

               Response.BinaryWrite(rptStream.ToArray());
               reporte.Close();
               Response.End();

           }
           catch (Exception ex)
           {
               lblMensaje.Text = ex.Message;
           }
       }
       private void GenerarReporteDinamico(DataTable dsNomina,String  NombreReporte, String Formato)
       {
           lblMensaje.Text = "";
           try
           {
               GenerarReportesIpnmSecretaria reporte = new GenerarReportesIpnmSecretaria(NombreReporte);
               reporte.SetDataSource(dsNomina);
               System.IO.MemoryStream rptStream = new System.IO.MemoryStream();
               if (Formato.Equals("PDF"))
               {
                   rptStream = (System.IO.MemoryStream)reporte.ExportToStream(ExportFormatType.PortableDocFormat);
               }
               else if (Formato.Equals("WORD"))
               {
                   rptStream = (System.IO.MemoryStream)reporte.ExportToStream(ExportFormatType.WordForWindows);
               }
               Response.Clear();
               Response.Buffer = true;


               if (Formato.Equals("PDF"))
               {
                   Response.ContentType = "application/pdf";
               }
               else if (Formato.Equals("WORD"))
               {
                   Response.ContentType = "application/ms-word";
               }


               if (Formato.Equals("PDF"))
               {
                   Response.AddHeader("Content-Disposition", "attachment;filename=" + NombreReporte + ".pdf");
               }
               else if (Formato.Equals("WORD"))
               {
                   Response.AddHeader("Content-Disposition", "attachment;filename=" + NombreReporte + ".doc");
               }



               Response.BinaryWrite(rptStream.ToArray());
               reporte.Close();
               Response.End();

           }
           catch (Exception ex)
           {
               lblMensaje.Text = ex.Message;
           }
       }


       private void GenerarReporteDinamicoDataSet(DataSet dsNomina, String NombreReporte, String Formato)
       {
           lblMensaje.Text = "";
           try
           {
               GenerarReportesIpnmSecretaria reporte = new GenerarReportesIpnmSecretaria(NombreReporte);
               reporte.SetDataSource(dsNomina);
               System.IO.MemoryStream rptStream = new System.IO.MemoryStream();
               if (Formato.Equals("PDF"))
               {
                   rptStream = (System.IO.MemoryStream)reporte.ExportToStream(ExportFormatType.PortableDocFormat);
               }
               else if (Formato.Equals("WORD"))
               {
                   rptStream = (System.IO.MemoryStream)reporte.ExportToStream(ExportFormatType.WordForWindows);
               }
               Response.Clear();
               Response.Buffer = true;


               if (Formato.Equals("PDF"))
               {
                   Response.ContentType = "application/pdf";
               }
               else if (Formato.Equals("WORD"))
               {
                   Response.ContentType = "application/ms-word";
               }


               if (Formato.Equals("PDF"))
               {
                   Response.AddHeader("Content-Disposition", "attachment;filename=" + NombreReporte + ".pdf");
               }
               else if (Formato.Equals("WORD"))
               {
                   Response.AddHeader("Content-Disposition", "attachment;filename=" + NombreReporte + ".doc");
               }



               Response.BinaryWrite(rptStream.ToArray());
               reporte.Close();
               Response.End();

           }
           catch (Exception ex)
           {
               lblMensaje.Text = ex.Message;
           }
       }

       private DataSet ObtenerDataSet(String semestre,string ciclo,string especialidad,string flag_confirmado)
        {
            HttpContext context = HttpContext.Current;
            DataTable dato6 = new DataTable();
            String cicloRomano = "";
            Util_BL objUtil2 = new Util_BL();
            

           // lis.Clear();

            Alumno_BL obj = new Alumno_BL();


            dato6 = obj.DATA_MATRIC1_Nomina_Edita_DATATABLE(semestre, ciclo, especialidad); //detalle




           
            cicloRomano = objUtil2.CICLO_ROMANO(ciclo);

            // se arma un datatable co los datos de especialidad ciclo escuela
            Util_BL objUtil = new Util_BL();
            DataTable dato = new DataTable();
            DataTable dato2 = new DataTable();
            DataTable dato3 = new DataTable();
            dato = objUtil.DATA_ESPECIALIDAD_ListaPorCodigo(especialidad);
            dato2 = objUtil.DATA_MATRIC1_CuentaPorSexo(semestre, especialidad, ciclo, "F"); // CUENTA SEXO FEMENINO
            dato3 = objUtil.DATA_MATRIC1_CuentaPorSexo(semestre, especialidad, ciclo, "M"); // CUENTA SEXO MASCULINO

            // si tiene el flag_grupo=1 se pasa como valor de la especialidad el texto varios
            string ESPECIALIDAD = "";
            string semestre2 = ddlSemestre.SelectedValue.Substring(ddlSemestre.SelectedValue.Length - 1, 1);
            
                //ESPECIALIDAD = "VARIOS";

            string periodo = ddlSemestre.SelectedValue.Substring(0, 4);
            if (semestre2 == "1")
            {
                semestre2 = periodo+"-I (Período Marzo - Julio)";
            }

            if (semestre2 == "2")
            {
                semestre2 = periodo+"-II (Período Agosto - Diciembre)";
            }


            ESPECIALIDAD = dato.Rows[0]["DESESP"].ToString();
            


            DataTable Cabecera = new DataTable();
            Cabecera.Columns.Add("SEMESTRE_ACADEMICO");
            Cabecera.Columns.Add("ESCUELA_PROFESIONAL");
            Cabecera.Columns.Add("ESPECIALIDAD");
            Cabecera.Columns.Add("CICLO");
            Cabecera.Columns.Add("CONTEO_SEXOF");
            Cabecera.Columns.Add("CONTEO_SEXOM");

            DataRow fila = Cabecera.NewRow();
            fila[0] = semestre2;
            fila[1] = dato.Rows[0]["Descripcion"].ToString();
            fila[2] = ESPECIALIDAD;
            fila[3] = cicloRomano;
            fila[4] = dato2.Rows[0]["SEXO"].ToString();
            fila[5] = dato3.Rows[0]["SEXO"].ToString();


            Cabecera.Rows.Add(fila);

            Cabecera.AcceptChanges();
            Cabecera.TableName = "Cabecera";


            DataTable Detalle = new DataTable();
            Detalle.Columns.Add("Codigo");
            Detalle.Columns.Add("ApellidosyNombres");
            Detalle.Columns.Add("Condicion");
            Detalle.Columns.Add("Edad");
            Detalle.Columns.Add("Sexo");
            Detalle.Columns.Add("Observacion");
            Detalle.Columns.Add("EspecialidadDetalle");




            // se obtiene los datos del detalle
            DropDownList ddl;
            String codigo;
            String nombres;
            String estado;
            String edad;
            String sexo;
            String OBS;
            String EspecialidadDetalle;
            foreach (DataRow row in dato6.Rows)
            {

               

                codigo = row["COD_ALUMNO"].ToString();
                nombres = row["Nombres"].ToString();
                estado = row["Descripcion"].ToString();
                edad = row["Edad"].ToString();
                sexo = row["SEXO"].ToString();
                OBS = "";
                EspecialidadDetalle = row["COD_ESPEC"].ToString();
               
                DataRow fila2 = Detalle.NewRow();
                fila2[0] = codigo;
                fila2[1] = nombres;
                fila2[2] = estado;
                fila2[3] = edad;
                fila2[4] = sexo;
                fila2[5] = OBS;
                fila2[6] = EspecialidadDetalle;
                Detalle.Rows.Add(fila2);

            }



            /*se exporta a excel*/
            DataSet dsNomina = new DataSet();

            Cabecera.TableName = "Cabecera";
            Detalle.TableName = "Detalle";

            dsNomina.Tables.Add(Cabecera);
            dsNomina.Tables.Add(Detalle);
           
           return dsNomina;

        }



       private void GenerarReportenomina(DataSet dsNomina)
       {
           lblMensaje.Text = "";
           try
           {
               nomina reporte = new nomina();

               reporte.SetDataSource(dsNomina);
               System.IO.MemoryStream rptStream = new System.IO.MemoryStream();
               rptStream = (System.IO.MemoryStream)reporte.ExportToStream(ExportFormatType.PortableDocFormat);
               Response.Clear();
               Response.Buffer = true;
               Response.ContentType = "application/pdf";
               Response.AddHeader("Content-Disposition", "attachment;filename=" + "NOMINA.pdf");

               Response.BinaryWrite(rptStream.ToArray());
               reporte.Close();
               Response.End();

           }
           catch (Exception ex)
           {
               lblMensaje.Text = ex.Message;
           }
       }  
       protected void grvNomina_RowCommand(object sender, GridViewCommandEventArgs e)
       {
           lblMensaje.Text = "";
           try
           {
               GridViewRow row = (GridViewRow)(((Control)e.CommandSource).NamingContainer);
               int index = Convert.ToInt32(row.RowIndex);

               ICollection llaves =grvNomina.DataKeys[index].Values;
               Collection<string> coleccion = new Collection<string>();
  
               foreach (DictionaryEntry item in llaves)
               {
                   coleccion.Add(item.Value.ToString());
               }

               var semestre = coleccion[0];
               var GRUPO = coleccion[1];
               var CICLO = coleccion[2];
               var flag_confirmado = coleccion[3];
               var Flag_Grupo = coleccion[4];

               Secretaria_BL secretariabl = new Secretaria_BL();
               DataTable data = secretariabl.Lista_Nomina(semestre.ToString(), GRUPO.ToString(), CICLO.ToString());

                if (e.CommandName.Equals("word"))
                {
                    if (Flag_Grupo.ToString().Equals("1"))
                    {

                        GenerarReporteDinamico(data, "nomina_final", "WORD");


                    }
                    else if (flag_confirmado.ToString().Equals("0")){

                        DataSet dataNueva = ObtenerDataSet(semestre.ToString(), CICLO.ToString(), GRUPO.ToString(), flag_confirmado.ToString());
                        GenerarReporteDinamicoDataSet(dataNueva, "nomina", "WORD");
                    
                    }

                    else if (flag_confirmado.ToString().Equals("1"))
                    {

                        DataSet dataNueva = ObtenerDataSet(semestre.ToString(), CICLO.ToString(), GRUPO.ToString(), flag_confirmado.ToString());
                        GenerarReporteDinamicoDataSet(dataNueva, "nomina", "WORD");

                    }

                }
                else if (e.CommandName.Equals("PDF"))
                {

                    if (Flag_Grupo.ToString().Equals("1"))
                    {

                        GenerarReporteDinamico(data, "nomina_final", "PDF");
                    }

                    else if (flag_confirmado.ToString().Equals("0"))
                    {

                        DataSet dataNueva = ObtenerDataSet(semestre.ToString(), CICLO.ToString(), GRUPO.ToString(), flag_confirmado.ToString());
                        GenerarReporteDinamicoDataSet(dataNueva, "nomina", "PDF");

                    }

                    else if (flag_confirmado.ToString().Equals("1"))
                    {

                        DataSet dataNueva = ObtenerDataSet(semestre.ToString(), CICLO.ToString(), GRUPO.ToString(), flag_confirmado.ToString());
                        GenerarReporteDinamicoDataSet(dataNueva, "nomina", "PDF");

                    }
                }

           }
           catch (Exception ex)
           {
               lblMensaje.Text = ex.Message;
           }
           
       }

    }
}